
public class
import org.junit.Test;
        import java.util.*;
        import java.util.function.Biconsumer;
/**包位置：java.util
 * Mop顶级映射接口
 * 作用：一个元素由两个对象构成：分别键：Key与值：Value；
 * 保存一个元素：Key---value【保存一对：两个对象】
 * 用途：通常与数据库搭配使用
 * 特点：键：无序，无下标，不可重复，实际存HashSet
 *       值：存泛型约束的类型，可以重复，实际存Collection
 *       Map接口对象创建---实现类；
 *       HashMap：【常用：HashMap的方法与Map方法类似】有键值对组成，使用哈希算法实现！
 *       键与值可以为null，键中只允许一个null；
 *       LinkedHashMap【不常用：方法与HashMap类似】
 *       TreeMap：【不用】
 *       HashTable：【不用】
 *       ConcurrentHashMap：【常用】多线程
 */
public class mapAPI{
    @Test
    public void testMap(){
        //创建Map映射集合接口
        Map<Object,String> map=new HashMap<>();
        /**
         * put(键K，值V)       返回值：V value---实际Collerction
         * 作用：映集合存入一对元素：键与值
         */
        map.put("西游记","黄风大圣");//Key键：Set集合：无序，无下标，唯一
        map.put("红楼梦","林黛玉")
        map.put("水浒传","宋公明")
        map.put("三国志","曹操")
        map.put("红楼梦","贾宝玉")
        map.put(null,"黄风大圣"
        System.out.println("Map集合："+map) ;
        //需求：获取一组元素中值：“林黛玉“  get（键）通过键找到值
        String lin=map.get("红楼梦");
        System.out.println("通过键找到值："+lin);
          :
        //没有这个  键，自动按照Collection对象，补对象默认：null
        System.out.println("通过键找到值【键不存在】："+map.get("三国"));
          //删除元素中：键   remove(Key)   返回值：V  value   Collection
        map.remove("红楼梦");
        System.out.println("Map集合："+map);
        //size()获取映射集合的元素个数
        System.out.println("Map集合元素总数："+map.size());
        //containsKey()    判断键是否存在  返回值：boolean
        //containsValue()    判断键是否存在  返回值：boolean
        boolean b=map.containsKey("三国志");
        System.out.println("判断键是否存在："+b);
        boolean v=map.containsValue("宋公明");
        System.out.println("判断键是否存在："+v);
    }
    /**
     * Map映射集合中：一组键值对存入【一组元素：Entry】
     * 遍历映射集合：遍历所有的键、遍历所有的值，遍历所有的Entry
     * keySet：获取集合中所有的值
     * entrySet：获取集合中所有的[entry:键与值]
     */
    @Test
    public void testMaps() {
        Map<Object, String> map = new HashMap<>();
        map.put("唐山", "棋子烧饼");
        map.put("邢台", "酸枣汁");
        map.put("邯郸", "三宝烧鸡");
        map.put("沧州", "火锅鸡");
        //KeySet()   获取所有的键
        Set set = map.keySet();
        //遍历所有的键：增强for循环
        for (Object o : set) {//从set集合中获取到所有的键
            System.out.println("获取所有的键：" + o);
        }
        //2.values()   获取所有值
        Collection<String> collections = map.values();
        //遍历所有的值：增强for：集合中获取到所有元素
        for (String s : collections) {
            System.out.println("获取所有的值" + s);
        }
        //3.entrySet()   获取所有的Entry键值
        //返回值：Set<Map.Entry<K,V>>
        //Entry类型：Mao.Entry<K,V>
        //Entry存键值的对象---Map增加一个针对“键对值”的对象
        //Map.Entry    【Map接口.Emtry对象】获取到表示所有的Entry的方法
        Set<Map.Entry<Object, String>> set2 = map.entrySet();
        //获取所有【entry】键值对
        for (Map.Entry<Object, String> q : set2) {
            //System.out.println("获取所有的entry：“+q);
              :
//Map.Entry    【Map接口.Entry对象】获取到表示所有的Entry的方法
            Set<Map.Entry<Object, String>> set2 = map.emtrySet();
            //获取所有【entry】键值对
            for (Map.Entry<Object, String> q : set2) {
                //System.out.println("获取所有的entry：“+q);
                //Entry中Key与Value方法：getkey() getValue()
                Object key = q.getKey();..
                String value = q.getValue();
                System.out.println("打印Entry中键与值；" + Key + "" + value);
            }
        }
        /**
         * forEach(new BiConsumer())
         * BiConsumer 接口---封装了Entry对象的键与值
         * 作用：遍历出集合中所有的entry【键与值】
         */
        @Test
        public void testMaps () {
            Map<Object, String> map = new HashMap<>();
            map.put("唐山", "棋子烧饼");
            map.put("邢台", "酸枣汁");
            map.put("邯郸", "三宝烧鸡");
            map.put("沧州", "火锅鸡");
            //forEach(接口)遍历映射集合：键与值
            map.forEach(new BiConsumer<Object, String>() {
                //accept(K,V)   获取Entry中所有的键与值
                public void accept(Object o, String s) {
                    System.out.println("所有的键；" + o);
                    System.out.println("所有的值；" + s);
                }
            });
        }
        /**
         *putIfAbsent()
         *作用：存一组entry，判断指定的键是否存在，不存在将键值插入
         *作用：存一组entry，判断指定的键是否存在，存在将键值不插入
         */
        @Test
        public void testHashMap () {
            Map<Object, String> map = new HashMap<>();
            map.put("唐山", "棋子烧饼");
            map.put("邢台", "酸枣汁");
            map.put("邯郸", "三宝烧鸡");
            map.put("沧州", "火锅鸡");
        }
    }